home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 002 / emacssrc.arc / FILEIO.C < prev    next >
Text File  |  1986-11-26  |  4KB  |  161 lines

  1. /*
  2.  * The routines in this file read and write ASCII files from the disk. All of
  3.  * the knowledge about files are here. A better message writing scheme should
  4.  * be used.
  5.  */
  6. #include        <stdio.h>
  7. #include    "estruct.h"
  8. #include        "edef.h"
  9.  
  10. #if    MEGAMAX
  11. overlay "fileio"
  12. #endif
  13.  
  14. FILE    *ffp;                           /* File pointer, all functions. */
  15.  
  16. /*
  17.  * Open a file for reading.
  18.  */
  19. ffropen(fn)
  20. char    *fn;
  21. {
  22.         if ((ffp=fopen(fn, "r")) == NULL)
  23.                 return (FIOFNF);
  24.         return (FIOSUC);
  25. }
  26.  
  27. /*
  28.  * Open a file for writing. Return TRUE if all is well, and FALSE on error
  29.  * (cannot create).
  30.  */
  31. ffwopen(fn)
  32. char    *fn;
  33. {
  34. #if     VMS
  35.         register int    fd;
  36.  
  37.         if ((fd=creat(fn, 0666, "rfm=var", "rat=cr")) < 0
  38.         || (ffp=fdopen(fd, "w")) == NULL) {
  39. #else
  40.         if ((ffp=fopen(fn, "w")) == NULL) {
  41. #endif
  42.                 mlwrite("Cannot open file for writing");
  43.                 return (FIOERR);
  44.         }
  45.         return (FIOSUC);
  46. }
  47.  
  48. /*
  49.  * Close a file. Should look at the status in all systems.
  50.  */
  51. ffclose()
  52. {
  53. #if    MSDOS & CTRLZ
  54.     fputc(26, ffp);        /* add a ^Z at the end of the file */
  55. #endif
  56.     
  57. #if     V7 | USG | BSD | (MSDOS & (LATTICE | MSC))
  58.         if (fclose(ffp) != FALSE) {
  59.                 mlwrite("Error closing file");
  60.                 return(FIOERR);
  61.         }
  62.         return(FIOSUC);
  63. #else
  64.         fclose(ffp);
  65.         return (FIOSUC);
  66. #endif
  67. }
  68.  
  69. /*
  70.  * Write a line to the already opened file. The "buf" points to the buffer,
  71.  * and the "nbuf" is its length, less the free newline. Return the status.
  72.  * Check only at the newline.
  73.  */
  74. ffputline(buf, nbuf)
  75. char    buf[];
  76. {
  77.         register int    i;
  78. #if    CRYPT
  79.     char c;        /* character to translate */
  80.  
  81.     if (cryptflag) {
  82.             for (i = 0; i < nbuf; ++i) {
  83.             c = buf[i] & 0xff;
  84.             crypt(&c, 1);
  85.             fputc(c, ffp);
  86.         }
  87.     } else
  88.             for (i = 0; i < nbuf; ++i)
  89.                     fputc(buf[i]&0xFF, ffp);
  90. #else
  91.         for (i = 0; i < nbuf; ++i)
  92.                 fputc(buf[i]&0xFF, ffp);
  93. #endif
  94.  
  95. #if    ST520
  96.         fputc('\r', ffp);
  97. #endif        
  98.         fputc('\n', ffp);
  99.  
  100.         if (ferror(ffp)) {
  101.                 mlwrite("Write I/O error");
  102.                 return (FIOERR);
  103.         }
  104.  
  105.         return (FIOSUC);
  106. }
  107.  
  108. /*
  109.  * Read a line from a file, and store the bytes in the supplied buffer. The
  110.  * "nbuf" is the length of the buffer. Complain about long lines and lines
  111.  * at the end of the file that don't have a newline present. Check for I/O
  112.  * errors too. Return status.
  113.  */
  114. ffgetline(buf, nbuf)
  115. register char   buf[];
  116. {
  117.         register int    c;
  118.         register int    i;
  119.  
  120.         i = 0;
  121.  
  122.         while ((c = fgetc(ffp)) != EOF && c != '\n') {
  123.                 if (i >= nbuf-2) {
  124.             buf[nbuf - 2] = c;    /* store last char read */
  125.             buf[nbuf - 1] = 0;    /* and terminate it */
  126.                         mlwrite("File has long line");
  127. #if    CRYPT
  128.             if (cryptflag)
  129.                 crypt(buf, strlen(buf));
  130. #endif
  131.                         return (FIOLNG);
  132.                 }
  133.                 buf[i++] = c;
  134.         }
  135.  
  136. #if    ST520
  137.     if(buf[i-1] == '\r')
  138.         i--;
  139. #endif
  140.         if (c == EOF) {
  141.                 if (ferror(ffp)) {
  142.                         mlwrite("File read error");
  143.                         return (FIOERR);
  144.                 }
  145.  
  146.                 if (i != 0) {
  147.                     buf[i] = 0;
  148.                         return(FIOFUN);
  149.                 }
  150.  
  151.                 return (FIOEOF);
  152.         }
  153.  
  154.         buf[i] = 0;
  155. #if    CRYPT
  156.     if (cryptflag)
  157.         crypt(buf, strlen(buf));
  158. #endif
  159.         return (FIOSUC);
  160. }
  161.